# -*- coding: UTF-8 -*- #
"""
@filename:01-4几何图形的绘制.py
@author:JiYujia
@time:2022-09-04
"""
import cv2
import numpy as np

# 创建一张图片
# img = np.ones((500,500,3),np.uint8) * 255
img = np.zeros((500, 500, 3), np.uint8)
# 绘制线段 画出十字
cv2.line(img, (60, 240), (220, 240), (0, 0, 255), 3, cv2.LINE_AA)
cv2.line(img, (140, 160), (140, 320), (0, 0, 255), 3, cv2.LINE_AA)

# 绘制矩形
cv2.rectangle(img, (100, 200), (180, 280), (0, 255, 255), 3, cv2.LINE_AA)
cv2.rectangle(img, (80, 180), (200, 300), (0, 255, 255), 3, cv2.LINE_AA)
cv2.rectangle(img, (60, 160), (220, 320), (0, 255, 255), 3, cv2.LINE_AA)

# 绘制原型
cv2.circle(img, (140, 240), 80, (255, 255, 0), 3, cv2.LINE_AA)
cv2.circle(img, (140, 240), 60, (255, 255, 0), 3, cv2.LINE_AA)
cv2.circle(img, (140, 240), 40, (255, 255, 0), 3, cv2.LINE_AA)

# 绘制椭圆形
cv2.ellipse(img, (140, 80), (100, 50), 0, 0, 360, (0, 255, 0), 2, cv2.LINE_AA)
cv2.ellipse(img, (140, 80), (90, 40), 0, 0, 90, (255, 0, 0), 2, cv2.LINE_AA)
cv2.ellipse(img, (140, 80), (90, 40), 0, 270, 360, (0, 255, 0), 2, cv2.LINE_AA)
cv2.ellipse(img, (140, 80), (80, 30), 0, 0, 90, (0, 255, 0), 2, cv2.LINE_AA)
cv2.ellipse(img, (140, 80), (80, 30), 0, 270, 360, (255, 255, 0), 2, cv2.LINE_AA)
cv2.ellipse(img, (140, 80), (70, 20), 0, 90, 270, (255, 255, 0), 2, cv2.LINE_AA)

# 绘制多边形
pts = np.array([[400, 100], [300,140], [450, 250], [350,250]], np.int32)
cv2.polylines(img, [pts], True, [0, 0, 255], 1, cv2.LINE_AA)

# 绘制文本
cv2.putText(img, "OPENCV", (0, 450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 2)

cv2.imshow('image', img)
cv2.waitKey(0)


# LINE_AA相关参考文章：https://blog.csdn.net/wenhao_ir/article/details/125535836
# 四个枚举值，分别为FILLED 、LINE_4 、LINE_8 、LINE_AA 。
# 其中FILLED并没有说明，说明这个枚举值应该没啥作用。

# LINE_4表示使用的算法计算出的属于线段上的像素点，相邻的两点之间只有四个方向。
# LINE_8表示使用的算法计算出的属于线段上的像素点，相邻的两点之间只有八个方向。
# LINE_AA表示使用的算法计算出的属于线段上的像素点，相邻的两点之间是大于八个方向的，比如十六个、三十二个之类的。具体是多少个，就得去看研究算法的源代码了，

# LINE_4和LINE_8区别不大，但明显能感觉到LINE_AA比LINE_4和LINE_8平滑得多，即抗锯齿性能好。
